Conversation
* 优化 ScriptEditor * Update ScriptEditor.tsx * Update ScriptEditor.tsx * ✨ 调整隐藏编辑框侧边栏位置 #1185 (#1254) * ✨ 调整隐藏编辑框侧边栏位置 #1185 * 图标展示反了 * 调整 `confirm_leave_page` / `script_modified_leave_confirm` 提示避免按「新增脚本」时弹出提示 * Update ScriptEditor.tsx * css 布局修正 * 统一 .focus 为 delayedEditorFocus * 🐛 修复 ScriptEditor review 问题 - 将模块级 cid 变量改为 useRef,避免多实例共享 timer - hotKeys.current.length = 0 改为 hotKeys.current = [],避免原地修改影响旧引用 - handleDeleteEditor 在 setEditors 回调内重新计算 index,修复竞态问题 - 移除冗余的 scriptList.find 查找 - 修复「袑始化」笔误为「初始化」 - 移除重复的 position: absolute 声明 --------- Co-authored-by: wangyizhi <yz@ggnb.top>
rspack build 阶段未转换 manifest.json 中的版本号,导致 "1.4.0-beta" 等非法版本使扩展无法加载,E2E 测试全部失败。 复用 pack.js 中的转换逻辑,在 CopyRspackPlugin transform 中将版本号转为纯数字格式(如 1.4.0.1100)。
将 rspack.config.ts 和 scripts/pack.js 中重复的版本转换逻辑 提取到 scripts/version.js 中复用。
- gm-api.spec.ts: Phase 2 重启 context 后等待 service worker 注册完成 再交给 fixtures,避免 extensionId fixture 用 10s 全局超时等待失败 - gm-api.spec.ts: 用事件驱动 Promise 替换 500ms 轮询循环, console 结果一出现立即继续 - utils.ts: installScriptByCode 用 DOM 事件等待替代固定延迟: click 后等光标出现,粘贴后等 .view-lines 内容变化 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
新增 AI Agent 聊天模块,包括聊天界面、服务层、数据存储和多语言支持
将 Agent API 请求路由到 runtime/gmApi 通道,通过 @PermissionVerify.API 装饰器实现权限验证,脚本首次调用时弹窗确认,防止未授权消耗 API Token。
- 新增 OPFS 文件浏览器页面,支持目录浏览、文件预览和删除操作 - 默认进入 agents/ 目录,支持面包屑导航到根目录 - 支持在 conversation.create 时注册工具,简化多轮对话的工具传递 - 添加 8 种语言的 i18n 翻译
- 修复 callLLM 提前转发 done 事件导致客户端过早 resolve 的问题 - 修复 WindowMessage.connect 未使用 "*" targetOrigin 导致沙箱消息被丢弃 - 修复 tool calling 循环中 assistant 消息缺少 tool_calls 字段 - 支持 OpenAI 和 Anthropic 格式的 tool_calls 消息构建 - UI 合并 tool 结果到 assistant 的 ToolCallBlock 展示,过滤 tool/system 消息 - 提取 buildInstance 函数解决装饰器 this 绑定问题,使用 uuidv4 生成 ID
- ChatMessage 类型新增 usage/durationMs/firstTokenMs 字段 - Service Worker 测量 LLM 调用总耗时并通过 done 事件返回 - UI 层捕获首 token 延迟和 token 用量,持久化到消息中 - 新增 MessageToolbar 组件:左侧操作按钮(复制/重新回答/删除),右侧元数据信息(token用量/耗时/TTFT/工具调用数) - 流式期间显示实时计时动画,完成后切换为最终数据 - 删除操作支持二次确认 - 新增 deleteMessages 批量删除辅助函数 - 添加 i18n 多语言支持(8个locale)
- 新增 CATTool 元数据解析、存储、注册和执行完整链路 - 新增 CAT.agent.tools GM API(install/remove/list/call) - 修复 CATTool 沙箱执行时 args 未定义的问题:使用 compileScriptCodeByResource 包裹代码以启用 with 上下文绑定 - 优化 Agent Chat UI 组件样式
将 App.tsx (~1130行) 按职责拆分为: - utils.ts: 纯工具函数和常量 - hooks.tsx: useInstallData() 自定义 hook - components/CATToolInstallView.tsx: CATTool 安装视图 - components/ScriptInstallView.tsx: UserScript/Subscribe 安装视图 - App.tsx: 精简为路由分发 (~57行)
新增 example/agents/tools/ 目录: - hello_world.js: 最简 CATTool 示例 - text_processor.js: 多参数和 enum 类型 - json_formatter.js: JSON 处理和错误处理 - weather_query.js: GM_xmlhttpRequest 网络请求 - use_cattool.js: 通过脚本 API 安装和调用 CATTool - README.md: 格式说明和测试方法
- 修复历史消息未携带 toolCalls 字段导致多轮 tool calling 上下文丢失 - 添加 OpenAI 流式 API 错误响应处理 - 添加 /new 命令和 clearMessages 接口用于清空对话上下文 - UI 发送消息时正确传递 toolCallId 和 toolCalls
- 删除独立的 handleChat,UI 和 Sandbox 统一走 conversationChat 通道 - 持久化责任从 UI 移交到 SW,简化前端逻辑 - 字段命名统一:createdAt/updatedAt → createtime/updatetime - 支持 UI 动态切换 modelId - 大幅补充 Agent 相关测试(流式解析、tool calling 循环、CATTool 边界等)
- 对话实例支持 / 命令拦截机制,内置 /new 命令清空对话 - 脚本可通过 commands 选项注册自定义命令并覆盖内置命令 - 修复会话列表删除确认弹框因鼠标移开导致隐藏的问题 - 会话 ID 同步到 URL 参数,刷新页面保持当前会话选中 - 新增命令机制 8 个单元测试
- CATTool 安装改为打开安装页面确认,支持脚本来源追踪和更新提示 - CATToolRepo 索引/数据分离(tools.json 索引 + data/<id>.json 完整记录) - CATTool UUID 由 SW 统一生成,通过全局映射支持 GM API 权限验证 - AgentModelConfig 从 SystemConfig 迁移到独立的 AgentModelRepo - AgentModelRepo.getDefaultModelId 使用 chrome.storage.local 直接存取 - cancelCATToolInstall 统一为 try/finally 模式 - openCATToolInstallPage 增加 tab.id 空值检查
实现 Agent 框架的 DOM 操作 API,支持两种模式: - 默认模式:通过 chrome.scripting.executeScript 操作 - trusted 模式:通过 chrome.debugger CDP 实现真实用户输入 新增 8 个 Agent 工具:dom_list_tabs, dom_navigate, dom_read_page, dom_screenshot, dom_click, dom_fill, dom_scroll, dom_wait_for readPage 支持 summary/detail 分层读取,控制上下文大小; 操作后自动返回 ActionResult(跳转/新 tab/dialog 检测); debugger 权限放在 optional_permissions 动态申请。
- 新增 Skill 类型定义(SkillSummary, SkillRecord, SkillApiRequest 等) - SKILL.md 解析器(YAML frontmatter + markdown body) - SkillRepo OPFS 存储(registry + scripts + references) - AgentService 集成:loadSkills, installSkill, resolveSkills - 2 个 meta-tool:execute_skill_tool, read_reference - GM API: CAT.agent.skills(list/get/install/remove) - UI: ChatInput 增加 Skills 选择器
- agent-fixtures.ts: Mock LLM 基础设施(context.route 拦截 + OpenAI SSE 响应) - agent-conversation.spec.ts: 基础对话、Tool Calling、多轮上下文保持 - agent-cattool.spec.ts: CATTool 安装/调用/删除、CATTool + 对话联动
resolveSkills 不再将完整 SKILL.md 正文和 CATTool schema 一次性注入 system message, 改为三层渐进加载:1) 摘要列表 2) load_skill 按需获取 prompt 3) execute_skill_tool/read_reference 按需执行。 execute_skill_tool 新增 skill_name 参数确定工具作用域,CATTool 脚本改为执行时按需加载。 新增 14 个 Skill 系统单元测试。
ephemeral 模式下会话不持久化到 OPFS、不加载内置工具和 Skills, 工具完全由脚本提供,消息历史由脚本端内存管理。 SW 端无状态处理,仅解析 model 配置调用 LLM。
…rompts 实现完整的 MCP (Model Context Protocol) 客户端: - MCPClient: JSON-RPC 2.0 over HTTP POST,Session ID 管理,认证头 - MCPService: 连接池管理,懒连接,MCP 工具自动注册到 ToolRegistry - MCPServerRepo: chrome.storage 持久化服务器配置 - GM API: CAT.agent.mcp(SW + Content 双侧),权限验证 - UI: AgentMcp 页面 — 服务器 CRUD、启用/禁用、测试连接 - 单元测试覆盖 MCPClient、MCPToolExecutor、MCPService
agent_model:__default__ 存储的是默认模型 ID(字符串),被 find() 当作 AgentModelConfig 返回,导致 UI 访问 model.apiKey.length 时报 TypeError。
- 解析 SSE delta 中的 reasoning_content 字段,发出 thinking_delta 事件(兼容 deepseek/o-series) - 将 usage 检查移到 choices 处理之后,修复最后一个 chunk 同时包含 tool_call 增量和 usage 时丢失数据的问题 - Service Worker callLLM() 收集 thinking 内容并持久化到 assistant 消息 - 修复 vitest.config.ts 中重复 exclude 导致 e2e 测试被误执行的问题
- tool 定义增加 options 和 multiple 参数 - ChatStreamEvent ask_user 事件传递选项字段 - UI 支持 Radio 单选(点击即提交)和 Checkbox 多选(确认提交) - 所有模式下保留文本输入框供自定义回答 - 新增 2 个单元测试覆盖选项传递
- 扩展 SearchEngineConfig 支持 bing/baidu,默认引擎改为 Bing - web_search 新增 searchBing/searchBaidu,html_extractor 新增对应解析方法 - 新增摘要模型配置(getSummaryModelId/setSummaryModelId),summarizeContent 优先使用摘要模型 - 新建 AgentSettings 页面:摘要模型选择 + 搜索引擎配置 - 侧边栏/路由注册、8 个 locale 文件新增 i18n keys - 新增 Bing/百度搜索测试用例
- 修复 Bing 搜索 URL 移除无效的 count 参数 - 修复 getSummaryModelId 未设置时报错问题 - 修复新会话应使用默认模型而非当前会话模型 - Agent 设置页面添加搜索引擎提示信息和保存成功反馈 - 补全 scriptcat.d.ts 类型定义(Attachment、ScreenshotResult 等) - 修复 NotificationDetails.text 字段类型错误
- 附件 ID 统一追加文件扩展名,便于类型识别 - 新增 CAT.agent.opfs.readAttachment API 读取内部附件存储 - usage 增加 cacheCreationInputTokens/cacheReadInputTokens 追踪 - OPFS 浏览器支持图片预览、文件下载、图标区分 - AskUserBlock 交互卡片 UI 重构(渐变条、pill 选项、内联输入) - ConversationInstance 收集模型生成的图片/文件 content blocks - 模型配置自动检测 supportsVision/supportsImageOutput
UI 断开后会话继续执行,重新连接后通过 sync 快照恢复进度。 - 新增 RunningConversation 注册表与 broadcastEvent/updateStreamingState 机制 - handleConversationChat 支持 background 参数,断开只移除 listener 不 abort - 新增 attachToConversation 处理器,重连时发送 sync 快照 - UI hooks 新增 attachToConversation、useRunningConversations - ChatArea 自动 attach 运行中会话,ChatInput 增加后台模式开关 - 会话列表显示运行中指示器 - Script API (cat_agent) 支持 background 参数和 attach() 方法 - 26 个单元测试覆盖核心逻辑
- 任务工具精简为 3 个(create/update/list),新增持久化存储和 UI 实时推送 - 新增 TaskListBlock 组件展示任务进度 - 修复 chrome.runtime sendResponse 不支持 Blob 的问题,改用 blobUrl + CAT_fetchBlob 模式 - 简化 readAttachment API,统一返回 Blob 对象 - 新增 read blob 格式支持 - 更新系统提示词与类型定义
Offscreen 转发 GM API 请求到 ServiceWorker 时,原先走 ExtensionMessage (chrome.runtime, JSON 序列化),导致 Blob 等结构化数据丢失。 改为通过 postMessage 通道(结构化克隆)双向传输,所有 GM API 自动受益。
所有 Offscreen→SW 通信统一走 ServiceWorkerClientMessage(postMessage), 不再需要 ExtensionMessage(chrome.runtime)。
扩展 offscreen 页面的 controller 通常为 null,改用 navigator.serviceWorker.ready 获取 registration.active 作为 SW 引用。
…b' into feature/agent # Conflicts: # src/app/service/offscreen/index.ts
- handleOPFSApi 根据 sender 判断通道类型:postMessage 直传 Blob,chrome.runtime 走 blobUrl 中转 - content script middleware 拦截 write Blob 转 blobUrl - offscreen 新增 fetchBlob handler - cat_agent_opfs 客户端兼容两种通道返回 - opfs_read Agent 工具一律返回 blobUrl,避免文件内容进入 LLM 上下文 - 移除 bloburl format,GM API read 只保留 text/blob - saveAttachments 支持无 data 的附件引用(已保存的 imageBlock) - tool_registry 添加错误日志输出
- executeScript: 动态代码固定 MAIN world(ISOLATED 下 new Function 被 MV3 CSP 拦截) - click/fill/scroll/waitFor/readPage: 静态函数改为 ISOLATED world(纯 DOM 操作无需 eval) - execute_script tool: 移除 world 参数,不再暴露给用户 - ExecuteScriptOptions: 移除 world 字段 - scriptcat.d.ts / scriptcat.zh-CN.d.ts: 同步更新类型定义
- 附件存储从 conversations/attachments 迁移到 workspace/uploads,LLM 可通过 OPFS 路径访问 - Provider 非图片附件改用 OPFS 路径引用,减少 context 占用 - LLM API 调用增加重试机制(最多 5 次,递增延迟),UI 显示倒计时 - 系统提示词优化:强化 loop detection、ask early 策略、工具调用预算 - get_tab_content/web_fetch 必须提供 prompt 参数,引导高效使用 - ToolRegistry 错误信息包含可用工具列表,帮助 LLM 自我纠正 - 编辑消息支持附件增删和粘贴,停止生成时正确标记 tool call 状态 - 修复 SenderRuntime null safety、stopGeneration 竞态、base64 编码性能 - 新增 CAT.agent.model.getSummary API、后台模式 tooltip i18n
优化内置工具列表说明、子代理使用指引、OPFS 工作区文档, 明确 execute_script 的 MAIN world 限制和 blob URL 访问规则
- task_tools: 新增 get_task(获取完整详情)和 delete_task(删除任务) - 工具 description 精简为能力描述,行为指导移入系统提示词 - 系统提示词 Task Management 重构为 When/When NOT/Workflow/Tips 结构 - ask_user description 精简,推荐选项规范移入系统提示词 - 新增 6 个 task_tools 测试用例
- 新增 sub_agent_types 模块,支持子代理类型定义与提示词生成 - 重构 compact 提示词,改用结构化 8 段摘要格式提升上下文延续质量 - 优化系统提示词分层架构,支持动态工具描述注入 - 改进子代理 UI 展示(折叠/展开、状态指示、工具调用详情) - 增强 agent 服务端子代理管理与消息流转
- 新增 tool_call_guard:检测重复/循环工具调用并注入系统警告 - ChatInput 新增斜杠命令弹出菜单(/ 触发,键盘导航) - 子代理执行详情(消息历史、用量)持久化到 ToolCall 并在 UI 展示 - SubAgentBlock / MessageItem UI 改进
会话列表新增下载按钮,点击可将会话导出为 .md 文件, 支持用户/助手/系统消息、thinking 块、工具调用、子代理详情等。
|
不搞了?? |
我去。。。因为release/v1.5删了,自动close掉了 |
没想到有人已经先开始了,这也被你找到了。最近几天在忙其它事情,还没有继续处理。我明天看看 不知道这个作者有没有兴趣看看这边 @boommanpro |
|
好啊,如果需要我可以参与开发,一直是scriptcat的忠实用户~ |
|
我体验了下非常好,但是有一些可能和我原本定位不同的。
综合:我认为产品形态有很多玩法,可以先一起讨论下,确定方向,然后分担下开发任务,一起搞起来呗,有需要可以拉我一起加入。 |
目前转移到了 #1324 ,有什么想法也可以在 discussions 创建一个讨论
侧边栏也是一个很好的想法,但是还没有想好如何比较好的集成进来,就暂时没打算做,不过可以通过UserScript间接的实现,和哥哥说的定位应该不会一样,但是完全可以包含
我也想暴露为 mcp/cli 工具,但是好像没有好的方式?需要有一个长久驻留的进程,不过这个肯定会加入日程,看优先级了 非常欢迎,我觉得 ScriptCat + Agent 是一个非常有想象力的方向,目前本体着重于Agent系统的搭建,有更多的想法可以开一个discussions来讨论 目前准备将这个版本发布在v1.4.0-beta中,并且也在筹备skill网站(还没跑起来) |
概述
为 ScriptCat 新增完整的 AI Agent 平台,用户可以通过自然语言对话控制浏览器,自动完成网页操作、定时任务、工具调用等复杂工作流。
构建产物可以从 https://github.com/scriptscat/scriptcat/actions/workflows/build.yaml feature/agent 获取
Youtube 演示
https://www.youtube.com/watch?v=6OT7qeY3Uuk
如果你对此感兴趣,可以加入 Discord 进行交流
核心功能
🤖 AI 对话与多模型支持
🌐 浏览器 DOM 操作
🧩 Skill 技能系统
🔧 CATTool 自定义工具
🔌 MCP 协议支持
⏰ 定时任务调度
📂 OPFS 文件系统
💬 GM API 扩展(脚本侧 Agent API)
CAT.agent.*系列 API,用户脚本可与 Agent 深度交互:CAT.agent.dom— 脚本内调用 DOM 操作CAT.agent.conversation— 管理对话上下文CAT.agent.tools— 动态注册/调用工具CAT.agent.task— 任务生命周期管理UI 页面
技术亮点
数据规模